package com.itheima.springbootwebbtalis.controller;

import com.itheima.springbootwebbtalis.pojo.Dept;
import com.itheima.springbootwebbtalis.pojo.Result;
import com.itheima.springbootwebbtalis.service.DeptService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;
@Slf4j
@RequestMapping("/depts")
// 处理器类中一个完整的路径是：处理器上的路径+方法上的路径
@RestController
public class DeptController {
    // 1.定义方法，处理前端请求
    /*
    * 请求路径
    * 请求方式
    * 请求参数
    * */
    // 2.接收请求参数：无
    // 3.调用业务层查询部门列表
    // 4.封装响应结果：Result code/msg/data=部门列表（遵循接口文档编写）
    @Autowired
    private DeptService deptService;
    // 创建日志对象log
    //private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(DeptController.class);
    @GetMapping // 请求方式是Get  请求路径是/depts
    // 定义处理器方法：查询的方法 返回值类型：Result
    Result deptControllerShowAll(){
        // 请求的参数：无
        log.info("请求参数：无");
        // 调用业务层Service：部门查询方法
        List<Dept> depts = deptService.deptServiceShowAll();
        log.info("响应结果:{}",depts);
        // 封装响应结果：Result code/msg/data=部门列表（遵循接口文档编写）
        return  Result.success(depts);
    }

     // 删除指定部门处理器方法
    @DeleteMapping  // 请求方式：Delete 请求路径：/depts
    // 定义处理器方法：删除部门的方法 返回值类型：Result 返回值参数是id  id 类型是：number  请求参数：k=v id=1 可以用map
    public Result remove(Integer id){
        // 1.接收请求参数：k=v
        log.info("请求参数：{}",id);
        // 直接定义变量接收，变量名称=参数名称
        // 2.调用业务层方法，完成删除
        deptService.deptServiceRemove(id);
        // 3.封装响应结果：Result code/msg/data=null
        return Result.success();
    }
     // 添加部门处理器方法
    // 请求方式：Post 请求路径：/depts
    @PostMapping
    // 定义处理器方法:添加部门的方法 返回值类型：Result 返回值参数：dept
    public Result add(@RequestBody Dept dept){
        log.info("请求参数：{}",dept);
        // 请求参数是：json（请求体中） 格式，使用@RequestBody接收实体类对象/map
        deptService.deptServiceAdd(dept);
        return Result.success();
    }
    // 定义处理器方法：根据id查询部门
    // 请求路径加请求参数：/depts/id
    @GetMapping("/{id}")
    public  Result deptShowById(@PathVariable Integer id){ // 请求参数：请求路径:@PathVariable
        // 调用业务层方法，需要返回查询的结果给前端
        log.info("请求参数：{}",id);
        Dept dept = deptService.deptServiceShowId(id);
        log.info("响应结果：{}",dept);
        return Result.success(dept);

    }

   // 修改部门处理器方法
    // 请求路径：/depts
    @PutMapping
    public Result update(@RequestBody Dept dept){ // 请求参数;json
        log.info("请求参数：{}",dept);
        deptService.update(dept);
        return  Result.success();
    }
}
